package factory.funfactory;

import factory.goods.IPizza;

/**
 * 工厂方法模式
 * 将对象的实例化延迟到子类，让子类觉得对象的实例化
 * 这里可以是一个工厂接口
 * User:xuzhidian
 * Date:2018/3/13
 * Time:22:27
 */
public abstract class AbstractPizzaStore {

    /**
     * 使用简单工厂封装了判断的逻辑，让使用端使用更简单
     *
     * @param type
     * @return
     */
    public IPizza orderPizzaByFactory(String type) {
        IPizza pizza = createPizza(type);
        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        return pizza;
    }

    /**
     * 让每个商店实现自己创建Pizza的方式
     *
     * @param type
     * @return
     */
    protected abstract IPizza createPizza(String type);
}
